from openpyxl import load_workbook

class ExcelDataDriver:
    # 基于Excel的接口自动化测试框架，支持用例读取、依赖传递、请求发送及Excel数据操作
    def __init__(self, excel_path):
        self.excel_path = excel_path
        self.sheet = excel_path['Sheet1']  # 获取默认工作表
        self.yilai_data = {}  # 存储接口间的依赖数据（如token、pk_id）

    @staticmethod
    def read_excel(file_path, sheet):
        """读取Excel中的测试数据（用户名、密码、预期结果等）"""
        workbook = load_workbook(file_path, data_only=True)
        sheet = workbook[sheet]
        biaotou = [cell.value for cell in sheet[1]]  # 获取表头
        test_data = []
        for row in sheet.iter_rows(min_row=2, values_only=True):
            test_data.append(dict(zip(biaotou, row)))
        workbook.close()
        return test_data

    # file_path：Excel 文件路径（用于加载和保存文件）。
    # sheet_name：目标工作表名称（用于定位要写入的 Sheet）。
    # row_num：要写入的行号（比如第 2 行、第 3 行）。
    # actual_result：要写入的 “实际结果” 内容。
    # actual_col：实际结果的列号（代码中写死为 10）。
    # status_col：测试状态的列号（代码中未定义，属于遗漏）。
    # test_status：测试状态的内容（比如 “通过”“失败”）。
    @staticmethod
    def write_excel(file_path, sheet_name, row_num, actual_result):
        """写入实际结果和测试状态到Excel"""
        workbook = load_workbook(file_path)
        sheet = workbook[sheet_name]
        # 定位列：实际结果在第4列，测试状态在第5列（可根据表头调整）
        actual_col = 10
        # 写入实际结果
        sheet.cell(row=row_num, column=actual_col, value=actual_result)
        # 写入测试状态并设置样式
        workbook.save(file_path)
        workbook.close()